using System;

// 抽象类：包含抽象方法，不能直接实例化，必须通过子类继承并实现抽象方法
public abstract class UserTest
{
    // 抽象方法M1：无参数，无返回值
    public abstract void M1();

    // 抽象方法M2：接收string类型参数，返回int类型值
    public abstract int M2(string input);

    // 抽象方法M3：接收int数组参数，返回bool类型值
    public abstract bool M3(int[] numbers);
}

// 子类：继承抽象类UserTest，必须重写所有抽象方法（否则子类也需定义为抽象类）
public class ConcreteUserTest : UserTest
{
    // 重写抽象方法M1：实现简单的控制台输出功能
    public override void M1()
    {
        Console.WriteLine("子类重写的M1方法：无参数无返回值，执行基础逻辑");
    }

    // 重写抽象方法M2：接收输入字符串，返回字符串的长度
    public override int M2(string input)
    {
        // 处理空值情况，避免空引用异常
        if (string.IsNullOrEmpty(input))
        {
            return 0;
        }
        return input.Length; // 返回输入字符串的长度
    }

    // 重写抽象方法M3：判断int数组中是否包含偶数
    public override bool M3(int[] numbers)
    {
        // 处理空数组或null的情况
        if (numbers == null || numbers.Length == 0)
        {
            return false;
        }

        // 遍历数组，检查是否有偶数
        foreach (int num in numbers)
        {
            if (num % 2 == 0)
            {
                return true; // 找到偶数，返回true
            }
        }
        return false; // 未找到偶数，返回false
    }
}

// 测试类：验证抽象类和子类的功能